#include <SFML/Graphics.hpp>

int main() {
    // 创建一个视频模式对象
    sf::VideoMode vm(800, 600);
    // 使用视频模式对象实例化一个窗口
    sf::RenderWindow window(vm, "腾讯公司年度收入线形图");

    // 定义腾讯公司五年的年度收入数据
    std::vector<double> incomes = {100, 120, 150, 180, 200};

    // 计算最大宽度，以便对齐
    int maxWidth = 0;
    for (const auto& income : incomes) {
        maxWidth = std::max(maxWidth, static_cast<int>(std::to_string(income).length()));
    }

    // 创建一个VertexArray来存储线形的点
    sf::VertexArray lines(sf::LinesStrip, 2 * incomes.size());

    // 设置线的颜色
    sf::Color colors[incomes.size()];
    for (size_t i = 0; i < incomes.size(); ++i) {
        // 设置不同的颜色
        colors[i] = sf::Color((i * 255 / incomes.size()) % 255, (i * 255 / incomes.size()) % 255, (i * 255 / incomes.size()) % 255);
    }

    // 填充线的点
    for (size_t i = 0; i < lines.getVertexCount(); i += 2) {
        // 设置点的坐标
        lines[i].position = sf::Vector2f(50 + i * 100 / (incomes.size() - 1), 500 - static_cast<float>(incomes[i / 2]) * 10);
        lines[i + 1].position = sf::Vector2f(150 + i * 100 / (incomes.size() - 1), 500 - static_cast<float>(incomes[i / 2]) * 10);

        // 设置点的颜色
        lines[i].color = colors[i / 2];
        lines[i + 1].color = colors[i / 2];
    }

    // 游戏循环
    while (window.isOpen()) {
        // 处理事件
        sf::Event event;
        while (window.pollEvent(event)) {
            // 窗口关闭事件
            if (event.type == sf::Event::Closed)
                window.close();
        }

        // 清除窗口内容
        window.clear();

        // 绘制线形图
        window.draw(lines);

        // 更新窗口内容
        window.display();
    }

    return 0;
}